/*******************************************************************************
  * 文件：YLDeviceCtrl.h
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2024-02-22
  * 说明：功率板负载控制
*******************************************************************************/
#ifndef __YL_DEVICE_CTRL_H
#define __YL_DEVICE_CTRL_H

/* 头文件 *********************************************************************/
// 通用头文件
#include "Typedefine.h"
#include "Constant.h"
#include "Macro.h"  
#include "OS_Timer.h"

/* 宏定义 *********************************************************************/
// 炉头编号
#define u8CZ1               0               // CZ1
#define u8CZ2               1               // CZ2
#define u8CZ3               2               // CZ3
#define u8CZ4               3               // CZ4
#define u8CZ_NUMS           4               // CZ总数
#define u8CZ_INVALID        0xFF            // 无效CZ

/* 类型定义 *******************************************************************/

#pragma pack(1)
typedef struct
{
    // Byte 0
    U8 u4CheckPanPulseCnt       :   4;      // 检锅脉冲数	
    U8 u3FanSpeed               :   3;      // 风机转速(预留)
    U8 u1CZOnOffStatus          :   1;      // 炉头ON/OFF状态

    // Byte 1
    U8 u8PanType                :   8;      // 锅具类型（预留）

    // Byte 2
    U8 u8GoalPower              :   8;      // 目标功率（缩小二十倍）

    // Byte 3
    U8 u8RemovePanCurrentValue  :   8;      // 移锅电流阈值（预留）

    // Byte 4
    U8 u8PPGDelay               :   8;      // PPG Delay(预留)
}YLFrameSendData_ts;// 跃龙协议数据域格式(发送)

typedef struct
{
    // Byte 0
    U8 ACVoltageAD;                 //母线电压8位ADC采样
    // Byte 1
    U8 IGBTCurrentAD;               // IGBT E极电流8位ADC采样值
    // Byte 2
    U8 IGBT_NTC_AD;                 // IGBT NTC 8位ADC采样
    // Byte 3
    U8 Coil_NTC_AD;                 // 线圈盘NTC 8位ADC采样值
    // Byte 4
    U8 AuxSensorAD;                 // 辅助传感器采样值 （预留）
    // Byte 5
    U8 PanDetectPulseCnt : 6;       // 实际检锅脉冲数
    U8 PanPresent : 2;              // 无锅标志位：0b11 无锅 0b00 有锅
    // Byte 6
    U8 RealPower;                   // 实际功率（缩小20倍）
    // Byte 7~8
    U16 ACCurrentAD;                // 母线电流采样 16bit
    // Byte 9
    U8 Preserved1;                  // 预留
    // Byte 10
    U8 ErrCode;                     // 错误码
    // Byte 11
    U8 PPG_Width;                   // PPG 宽度;寄存器值PPG 控制寄存器数值(Ton时间)
    // Byte 12
    U8 LCResonateFre;               // LC谐振频率（缩小20倍）
    // Byte 13
    U8 ACPeriod;                    // 母线电压频率（每秒过零次数）
    // Byte 14
    U8 OCP_OVP_State;               // 过流、过压保护状态
    // Byte 15
    U8 SoftSurgeState;              //
    // Byte 16
    U8 OCP_OVP_LevelState;          //
    // Byte 17
    U8 Preserved2;
    // Byte 18
    U8 Preserved3;
    // Byte 19
    U8 SyncCmpPulseCnt;             // 同步比较脉冲数: 工作时,10ms内的同步比较器脉冲数，可用于检测锅具类
    // Byte 20
    U8 DevStateCode;                // 设备状态码(状态机状态) 0:准备; 1:检锅状态1; 2:检锅状态2; 3:启动加热; 4:功率控制; 5:停止加热;
}YLFrameRecvData_ts;// 跃龙协议数据域格式(接收)
#pragma pack()

typedef struct
{
    U8 u8AD_Voltage[u8CZ_NUMS];     // 母线电压 AD值
    U8 u8AD_IGBTTemper[u8CZ_NUMS];  // IGBT温度 AD值
    U8 u8AD_CoilTemper[u8CZ_NUMS];  // 面板温度 AD值
    U8 u8RealPower[u8CZ_NUMS];      // CZ实际功率，缩小20倍
    U8 u8PanState[u8CZ_NUMS];       // 锅的状态
}YLCommDevInfor_ts; // 跃龙协议-设备状态

// 获取设备信息
U16 YLComm_RealPowerGet(U8 u8CZIndex);      // 获取CZ真实功率
U8 YLComm_IGBTTempGet(U8 u8CZIndex);        // 获取CZ的IGBT温度
U8 YLComm_CoilTempGet(U8 u8CZIndex);        // 获取CZ的面板温度
U16 YLComm_ACVoltageGet(U8 u8CZIndex);      // 获取CZ母线电压
U8 YLComm_PanStateGet(U8 u8CZIndex);        // 获取CZ有无锅

void YLComm_CookZoneCtrl(U8 u8CZIndex,U8 u8GoalPower);  // CookZone功率控制
void YLComm_DevCtrlInit(void);      // 初始化

#endif /* __YL_DEVICE_CTRL_H */

/***************************** 文件结束 ***************************************/
